echo on
format short 
% scriviamo una matrice casuale con 3 righe
% e 4 colonne elementi interi
A=fix(rand(3,4)*10)
% questa e' una matrice rettangolare
pause
% scriviamo una matrice quadrata
A = fix(rand(3,3)*10)
% il numero di righe e' uguale al numero di 
% colonne
pause
% gli elementi delle matrici si denotano
% usando l'indice di riga e di colonna
A(1,1)
A(2,2)
A(3,3)
% questi sono elementi principali o diagonali
pause
L = [ 1 0 0; 3 4 0; 5 6 7]
% L e' una matrice triangolare inferiore
pause
U = [ 4 3 2; 0 2 5; 0 0 9]
% U e' una matrice triangolare superiore
pause
D = diag([2,3,3])
% D e' una matrice diagonale
% 
pause
A, % visualizziamo le colonne di A
pause
A(:,1), % prima colonna
pause
A(:,2), % seconda colonna
pause
A(:,3), % terza colonna
A, % visualizziamo le righe di A
pause
A(1,:), % prima riga
pause
A(2,:), % seconda riga
pause
A(3,:), % terza riga 
pause
A, % visualizziamo una sottomatrice
pause
A(1:2,1:2) % sottomatrice principale
pause
A(1:2,1:3) % sottomatrice 
pause
A(2:3,1:2) % sottomatrice
pause
% scriviamo la matrice identita '
I = eye(4,4)
pause
% scriviamo la matrice nulla
O = zeros(4,4)
pause
% scriviamo la trasposta di A
AT = A'
pause
% scriviamo una matrice simmetrica
B = (A+A')
pause
% la matrice B e' simmetrica infatti
B-B'
% B-B' e' la matrice nulla
pause
% il + esegue la somma fra matrici
C = A+B
C(1,1) - (A(1,1)+B(1,1))
C(2,2) - (A(2,2)+B(2,2))
pause
% se moltiplichiamo una matrice per uno 
% scalare moltiplichiamo tutti gli elementi 
% della matrice
D = 3*A
pause
D(1,1) - 3*A(1,1)
D(2,1) - 3*A(2,1)
pause
% prodotto riga per colonne
% viene eseguito con *
C = A*B 
pause
C(1,1) 
(A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1))
pause
C(2,1) 
(A(2,1)*B(1,1)+A(2,2)*B(2,1)+A(2,3)*B(3,1))
pause
C(3,1) 
(A(3,1)*B(1,1)+A(3,2)*B(2,1)+A(3,3)*B(3,1))
% conviene usare l'istruzione compatta o 
% costruire una function che fa il prodotto
% riga per colonne?
pause
% prodmatmat e' una function che esegue 
% il prodotto
type prodmatmat.m
pause
% eseguiamo il prodotto e vediamo il tempo
% di esecuzione
% costruiamoci due matrici random di 100
% elementi
A = rand(100,100);
B = rand(100,100);
pause
tic, C1 = prodmatmat(A,B); toc
pause
tic, C2 = A*B; toc
pause
% C1 e C2 contengono gli stessi elementi
% max calcola i massimi elementi delle 
% colonne applicato a una matrice, il 
% massimo elemento applicato a un vettore
max(max(abs(C1-C2)))
pause
% il prodotto riga per colonne non e' 
%commutativo
A = [ 1 2; 3 4]
pause
B = [ 0 1; 0 0]
pause
A*B
B*A
pause
% se A*C = C*A le matrici commutano
C = [2 4; 6 8]
pause
A*C
C*A
pause
% data una matrice quadrata A,  B si dice 
% inversa di A se B*A=A*B = I
A
pause
% la function inv calcola l'inversa di A 
AI = inv(A)
pause
AI*A 
A*AI
pause
% inv(A*C) = inv(C)*inv(A)
inv(A*C)
inv(C)*inv(A)
pause
% una matrice che non ha inversa si dice
% singolare
% il determinante si calcola con det
det(A)
% A e' non singolare det ~= 0
pause
det(B)
% B e' singolare det == 0
pause
L
pause
inv(L)
% l'inversa di una matrice triangolare e'
% una matrice triangolare
pause
U
pause
inv(U)
pause
